/*
 * Miya.com Inc.
 * Copyright (c) 2004-2018 All Rights Reserved.
 */
package com.miya.erpmofa.common.lang.enums;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang.StringUtils;

/**
 * @author ${zhaowei}
 * @version $Id: ErrorCodeEnum.java, v 0.1 2018年08月08日 17:24 ${zhaowei} Exp $
 */
@SuppressWarnings("unused")
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum ErrorCodeEnum {
    /**
     * 公共错误码
     */
    SYSTEM_ERROR("SYSTEM_ERROR","SYSTEM_ERROR","系统异常","系统异常"),
    SIGN_FAIL("SIGN_FAIL","SIGN_FAIL","请求参数验签失败","请求参数验签失败"),
    PARAMETER_VERIFY_FAIL("PARAMETER_VERIFY_FAIL","PARAMETER_VERIFY_FAIL","参数校验失败,不能为空","参数校验失败,不能为空"),
    APP_ID_NOT_EXIST("APP_ID_NOT_EXIST","APP_ID_NOT_EXIST","app_id 不存在","app_id 不存在"),
    MERCHANT_ID_NOT_EXIST("MERCHANT_ID_NOT_EXIST","MERCHANT_ID_NOT_EXIST","merchant_id 不存在","merchant_id 不存在"),
    STORE_ID_NOT_EXIST("STORE_ID_NOT_EXIST","STORE_ID_NOT_EXIST","store_id 不存在","store_id 不存在"),
    /**
     * 商品查询错误码
     */
    COMMODITY_NOT_EXIST("COMMODITY_NOT_EXIST","COMMODITY_NOT_EXIST","查询商品不存在","查询商品不存在"),

    /**
     * 促销计算错误码
     */
    SPEC_ID_NOT_EXIST("SPEC_ID_NOT_EXIST","SPEC_ID_NOT_EXIST","规格ID不存在","规格ID不存在"),

    /**
     * 订单回调错误码
     */
    ORDER_EXIST("ORDER_EXIST","ORDER_EXIST","订单已经存在","订单已经存在"),
    /**
     * 支付方式编码未定义
     */
    ORDER_PAYCODE_UNDEFIND("ORDER_PAYCODE_UNDEFIND","ORDER_PAYCODE_UNDEFIND","支付方式编码未定义","支付方式编码未定义"),;
    /**
     *
     */
    /**
     * 枚举编码
     */
    @Getter
    private final String code;

    /**
     * 英文名
     */
    @Getter
    private final String englishName;

    /**
     * 中文名
     */
    @Getter
    private final String chineseName;

    /**
     * 枚举描述信息
     */
    @Getter
    private final String description;

    /**
     * 根据编码查询枚举。
     *
     * @param code 编码。
     * @return 枚举。
     */
    public static ErrorCodeEnum getByCode(String code) {
        for (ErrorCodeEnum value : ErrorCodeEnum.values()) {
            if (StringUtils.equals(code, value.getCode())) {
                return value;
            }
        }
        return null;
    }
}